home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / term-source.lha / FastMacroPanel.c < prev    next >
C/C++ Source or Header  |  1995-09-28  |  21KB  |  910 lines

  1. /*
  2. **    FastMacroPanel.c
  3. **
  4. **    Editing panel for fast! macros
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_LIST,GAD_MACRO,GAD_CODE,
  13.         GAD_TOP,GAD_UP,GAD_DOWN,GAD_END,
  14.         GAD_NEW,GAD_REMOVE,GAD_CLEAR,
  15.         GAD_LOAD,GAD_SAVE,GAD_USE,GAD_CLOSE
  16.     };
  17.  
  18. BOOLEAN __regargs
  19. FastMacroPanel(struct List *FastMacroList,STRPTR LastFastMacros,struct Window *Parent,BYTE *pFastMacrosChanged)
  20. {
  21.     struct LayoutHandle    *Handle;
  22.     BOOLEAN             MadeChanges,
  23.                  FastMacrosChanged;
  24.  
  25.     if(pFastMacrosChanged)
  26.         FastMacrosChanged = *pFastMacrosChanged;
  27.     else
  28.         FastMacrosChanged = FALSE;
  29.  
  30.     MadeChanges = FALSE;
  31.  
  32.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  33.         LH_LocaleHook,    &LocaleHook,
  34.     TAG_DONE))
  35.     {
  36.         struct Window    *FastWindow;
  37.         struct IBox     Bounds;
  38.  
  39.         LT_New(Handle,
  40.             LA_Type,    VERTICAL_KIND,
  41.         TAG_DONE);
  42.         {
  43.             LT_New(Handle,
  44.                 LA_Type,    VERTICAL_KIND,
  45.                 LA_LabelID,    MSG_V36_0037,
  46.             TAG_DONE);
  47.             {
  48.                 LONG MaxWidth,MaxHeight;
  49.  
  50.                 MaxWidth = MaxHeight = 0;
  51.  
  52.                 if(FastMacroList)
  53.                 {
  54.                     struct Node *Node;
  55.                     LONG Len;
  56.  
  57.                     for(Node = FastMacroList -> lh_Head ; Node -> ln_Succ ; Node = Node -> ln_Succ)
  58.                     {
  59.                         Len = strlen(Node -> ln_Name);
  60.  
  61.                         if(Len > MaxWidth)
  62.                             MaxWidth = Len;
  63.  
  64.                         MaxHeight++;
  65.                     }
  66.                 }
  67.  
  68.                 if(MaxWidth < 30)
  69.                     MaxWidth = 30;
  70.  
  71.                 if(MaxHeight < 10)
  72.                     MaxHeight = 10;
  73.                 else
  74.                 {
  75.                     if(MaxHeight > 20)
  76.                         MaxHeight = 20;
  77.                 }
  78.  
  79.                 LT_New(Handle,
  80.                     LA_Type,    LISTVIEW_KIND,
  81.                     LA_LabelID,    MSG_FASTMACROPANEL_MACRO_LIST_GAD,
  82.                     LA_LabelPlace,    PLACE_LEFT,
  83.                     LA_Chars,    30,
  84.                     LA_Lines,    10,
  85.                     LA_ID,        GAD_LIST,
  86.                     LALV_CursorKey,    TRUE,
  87.                     LALV_MaxGrowY,    MaxHeight,
  88.                     LALV_MaxGrowX,    MaxWidth,
  89.                     LALV_ResizeX,    TRUE,
  90.                     LALV_ResizeY,    TRUE,
  91.                     GTLV_Labels,    FastMacroList,
  92.  
  93.                     Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  94.                 TAG_DONE);
  95.  
  96.                 LT_New(Handle,
  97.                     LA_Type,    STRING_KIND,
  98.                     LA_LabelID,    MSG_FASTMACROPANEL_MACRO_GAD,
  99.                     LA_ID,        GAD_MACRO,
  100.                     GTST_MaxChars,    20,
  101.                     GA_Disabled,    TRUE,
  102.                 TAG_DONE);
  103.  
  104.                 LT_New(Handle,
  105.                     LA_Type,    STRING_KIND,
  106.                     LA_LabelID,    MSG_FASTMACROPANEL_MACRO_TEXT_GAD,
  107.                     LA_ID,        GAD_CODE,
  108.                     GTST_MaxChars,    255,
  109.                     GA_Disabled,    TRUE,
  110.                 TAG_DONE);
  111.  
  112.                 LT_EndGroup(Handle);
  113.             }
  114.  
  115.             LT_New(Handle,
  116.                 LA_Type,    HORIZONTAL_KIND,
  117.             TAG_DONE);
  118.             {
  119.                 LT_New(Handle,
  120.                     LA_Type,    HORIZONTAL_KIND,
  121.                     LA_LabelID,    MSG_V36_0038,
  122.                     LA_Spread,    TRUE,
  123.                     LA_SameSize,    TRUE,
  124.                 TAG_DONE);
  125.                 {
  126.                     LT_New(Handle,
  127.                         LA_Type,    TAPEDECK_KIND,
  128.                         LATD_ButtonType,TDBT_PREVIOUS,
  129.                         LATD_Smaller,    TRUE,
  130.                         LA_ID,        GAD_TOP,
  131.                         LA_NoKey,    TRUE,
  132.                         GA_Disabled,    TRUE,
  133.                     TAG_DONE);
  134.  
  135.                     LT_New(Handle,
  136.                         LA_Type,    TAPEDECK_KIND,
  137.                         LATD_ButtonType,TDBT_REWIND,
  138.                         LATD_Smaller,    TRUE,
  139.                         LA_ID,        GAD_UP,
  140.                         LA_NoKey,    TRUE,
  141.                         GA_Disabled,    TRUE,
  142.                     TAG_DONE);
  143.  
  144.                     LT_New(Handle,
  145.                         LA_Type,    TAPEDECK_KIND,
  146.                         LATD_ButtonType,TDBT_PLAY,
  147.                         LATD_Smaller,    TRUE,
  148.                         LA_ID,        GAD_DOWN,
  149.                         LA_NoKey,    TRUE,
  150.                         GA_Disabled,    TRUE,
  151.                     TAG_DONE);
  152.  
  153.                     LT_New(Handle,
  154.                         LA_Type,    TAPEDECK_KIND,
  155.                         LATD_ButtonType,TDBT_NEXT,
  156.                         LATD_Smaller,    TRUE,
  157.                         LA_ID,        GAD_END,
  158.                         LA_NoKey,    TRUE,
  159.                         GA_Disabled,    TRUE,
  160.                     TAG_DONE);
  161.  
  162.                     LT_EndGroup(Handle);
  163.                 }
  164.  
  165.                 LT_New(Handle,
  166.                     LA_Type,    HORIZONTAL_KIND,
  167.                     LA_LabelID,    MSG_V36_0043,
  168.                     LA_Spread,    TRUE,
  169.                     LA_SameSize,    TRUE,
  170.                 TAG_DONE);
  171.                 {
  172.                     LT_New(Handle,
  173.                         LA_Type,    BUTTON_KIND,
  174.                         LA_LabelID,    MSG_FASTMACROPANEL_NEW_GAD,
  175.                         LA_ID,        GAD_NEW,
  176.                     TAG_DONE);
  177.  
  178.                     LT_New(Handle,
  179.                         LA_Type,    BUTTON_KIND,
  180.                         LA_LabelID,    MSG_GLOBAL_REMOVE_GAD,
  181.                         LA_ID,        GAD_REMOVE,
  182.                         GA_Disabled,    TRUE,
  183.                     TAG_DONE);
  184.  
  185.                     LT_New(Handle,
  186.                         LA_Type,    BUTTON_KIND,
  187.                         LA_LabelID,    MSG_UPLOADQUEUE_CLEAR_TXT,
  188.                         LA_ID,        GAD_CLEAR,
  189.                         GA_Disabled,    FastMacroList -> lh_Head -> ln_Succ == NULL,
  190.                     TAG_DONE);
  191.  
  192.                     LT_EndGroup(Handle);
  193.                 }
  194.  
  195.                 LT_EndGroup(Handle);
  196.             }
  197.  
  198.             LT_New(Handle,
  199.                 LA_Type,    VERTICAL_KIND,
  200.             TAG_DONE);
  201.             {
  202.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  203.  
  204.                 LT_EndGroup(Handle);
  205.             }
  206.  
  207.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  208.                 LAGR_SameSize,    TRUE,
  209.                 LAGR_Spread,    TRUE,
  210.                 LA_ExtraSpace,    TRUE,
  211.             TAG_DONE);
  212.             {
  213.                 LT_New(Handle,
  214.                     LA_Type,    BUTTON_KIND,
  215.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  216.                     LA_ID,        GAD_USE,
  217.                     LABT_ReturnKey,    TRUE,
  218.                     LABT_ExtraFat,    TRUE,
  219.                 TAG_DONE);
  220.  
  221.                 LT_New(Handle,
  222.                     LA_Type,    BUTTON_KIND,
  223.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  224.                     LA_ID,        GAD_LOAD,
  225.                     LABT_ExtraFat,    TRUE,
  226.                 TAG_DONE);
  227.  
  228.                 LT_New(Handle,
  229.                     LA_Type,    BUTTON_KIND,
  230.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  231.                     LA_ID,        GAD_SAVE,
  232.                     LABT_ExtraFat,    TRUE,
  233.                     GA_Disabled,    FastMacroList -> lh_Head -> ln_Succ == NULL,
  234.                 TAG_DONE);
  235.  
  236.                 LT_New(Handle,
  237.                     LA_Type,    BUTTON_KIND,
  238.                     LA_LabelID,    MSG_GLOBAL_CLOSE_TXT,
  239.                     LA_ID,        GAD_CLOSE,
  240.                     LABT_EscKey,    TRUE,
  241.                     LABT_ExtraFat,    TRUE,
  242.                 TAG_DONE);
  243.  
  244.                 LT_EndGroup(Handle);
  245.             }
  246.  
  247.             LT_EndGroup(Handle);
  248.         }
  249.  
  250.         if(Screen && Window)
  251.         {
  252.             Bounds . Left    = Window -> LeftEdge;
  253.             Bounds . Top    = Window -> TopEdge;
  254.             Bounds . Width    = Window -> Width;
  255.             Bounds . Height    = Window -> Height;
  256.         }
  257.  
  258.         if(FastWindow = LT_Build(Handle,
  259.             LAWN_TitleID,        MSG_FASTMACROPANEL_FAST_MACRO_PREFERENCES_TXT,
  260.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  261.             LAWN_HelpHook,        &GuideHook,
  262.             LAWN_Parent,        Parent,
  263.             WA_DepthGadget,        TRUE,
  264.             WA_CloseGadget,        TRUE,
  265.             WA_DragBar,        TRUE,
  266.             WA_RMBTrap,        TRUE,
  267.             WA_Activate,        TRUE,
  268.             WA_SimpleRefresh,    TRUE,
  269.  
  270.             Screen ? LAWN_Bounds : TAG_IGNORE,&Bounds,
  271.         TAG_DONE))
  272.         {
  273.             struct IntuiMessage    *Message;
  274.             BOOLEAN             Done = FALSE;
  275.             ULONG             MsgClass;
  276.             UWORD             MsgCode;
  277.             struct Gadget        *MsgGadget;
  278.  
  279.             struct MacroNode    *Node,*Selected = NULL;
  280.             ULONG             Offset = 0;
  281.  
  282.             UBYTE              DummyBuffer[MAX_FILENAME_LENGTH],
  283.                         *DummyChar;
  284.             struct FileRequester    *FileRequest;
  285.  
  286.             GuideContext(CONTEXT_FASTMACROS);
  287.  
  288.             PushWindow(FastWindow);
  289.  
  290.             LT_ShowWindow(Handle,TRUE);
  291.  
  292.             do
  293.             {
  294.                 if(Wait(PORTMASK(FastWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  295.                     break;
  296.  
  297.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  298.                 {
  299.                     MsgClass    = Message -> Class;
  300.                     MsgCode        = Message -> Code;
  301.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  302.  
  303.                     LT_ReplyIMsg(Message);
  304.  
  305.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  306.                         Done = TRUE;
  307.  
  308.                     if(MsgClass == IDCMP_GADGETUP)
  309.                     {
  310.                         switch(MsgGadget -> GadgetID)
  311.                         {
  312.                             case GAD_CLOSE:
  313.                             case GAD_USE:
  314.  
  315.                                 Done = TRUE;
  316.                                 break;
  317.  
  318.                             case GAD_TOP:
  319.  
  320.                                 LT_SetAttributes(Handle,GAD_LIST,
  321.                                     GTLV_Labels,    ~0,
  322.                                 TAG_DONE);
  323.  
  324.                                 Remove((struct Node *)Selected);
  325.  
  326.                                 AddHead(FastMacroList,(struct Node *)Selected);
  327.  
  328.                                 RefreshFastWindow(TRUE);
  329.  
  330.                                 Offset = 0;
  331.  
  332.                                 LT_SetAttributes(Handle,GAD_LIST,
  333.                                     GTLV_Labels,    FastMacroList,
  334.                                     GTLV_Selected,    Offset,
  335.                                     GTLV_Top,    Offset,
  336.                                 TAG_DONE);
  337.  
  338.                                 LT_SetAttributes(Handle,GAD_TOP,
  339.                                     GA_Disabled,    TRUE,
  340.                                 TAG_DONE);
  341.  
  342.                                 LT_SetAttributes(Handle,GAD_UP,
  343.                                     GA_Disabled,    TRUE,
  344.                                 TAG_DONE);
  345.  
  346.                                 LT_SetAttributes(Handle,GAD_DOWN,
  347.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  348.                                 TAG_DONE);
  349.  
  350.                                 LT_SetAttributes(Handle,GAD_END,
  351.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  352.                                 TAG_DONE);
  353.  
  354.                                 MadeChanges = TRUE;
  355.  
  356.                                 break;
  357.  
  358.                             case GAD_UP:
  359.  
  360.                                 LT_SetAttributes(Handle,GAD_LIST,
  361.                                     GTLV_Labels,    ~0,
  362.                                 TAG_DONE);
  363.  
  364.                                 Node = Selected -> mn_Pred -> mn_Pred;
  365.  
  366.                                 Remove((struct Node *)Selected);
  367.  
  368.                                 Insert(FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  369.  
  370.                                 RefreshFastWindow(TRUE);
  371.  
  372.                                 Offset--;
  373.  
  374.                                 LT_SetAttributes(Handle,GAD_LIST,
  375.                                     GTLV_Labels,    FastMacroList,
  376.                                     GTLV_Selected,    Offset,
  377.                                     GTLV_Top,    Offset,
  378.                                 TAG_DONE);
  379.  
  380.                                 LT_SetAttributes(Handle,GAD_TOP,
  381.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  382.                                 TAG_DONE);
  383.  
  384.                                 LT_SetAttributes(Handle,GAD_UP,
  385.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  386.                                 TAG_DONE);
  387.  
  388.                                 LT_SetAttributes(Handle,GAD_DOWN,
  389.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  390.                                 TAG_DONE);
  391.  
  392.                                 LT_SetAttributes(Handle,GAD_END,
  393.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  394.                                 TAG_DONE);
  395.  
  396.                                 MadeChanges = TRUE;
  397.  
  398.                                 break;
  399.  
  400.                             case GAD_DOWN:
  401.  
  402.                                 LT_SetAttributes(Handle,GAD_LIST,
  403.                                     GTLV_Labels,    ~0,
  404.                                 TAG_DONE);
  405.  
  406.                                 Node = Selected -> mn_Succ;
  407.  
  408.                                 Remove((struct Node *)Selected);
  409.  
  410.                                 Insert(FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  411.  
  412.                                 RefreshFastWindow(TRUE);
  413.  
  414.                                 Offset++;
  415.  
  416.                                 LT_SetAttributes(Handle,GAD_LIST,
  417.                                     GTLV_Labels,    FastMacroList,
  418.                                     GTLV_Selected,    Offset,
  419.                                     GTLV_Top,    Offset,
  420.                                 TAG_DONE);
  421.  
  422.                                 LT_SetAttributes(Handle,GAD_TOP,
  423.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  424.                                 TAG_DONE);
  425.  
  426.                                 LT_SetAttributes(Handle,GAD_UP,
  427.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  428.                                 TAG_DONE);
  429.  
  430.                                 LT_SetAttributes(Handle,GAD_DOWN,
  431.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  432.                                 TAG_DONE);
  433.  
  434.                                 LT_SetAttributes(Handle,GAD_END,
  435.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  436.                                 TAG_DONE);
  437.  
  438.                                 MadeChanges = TRUE;
  439.  
  440.                                 break;
  441.  
  442.                             case GAD_END:
  443.  
  444.                                 LT_SetAttributes(Handle,GAD_LIST,
  445.                                     GTLV_Labels,    ~0,
  446.                                 TAG_DONE);
  447.  
  448.                                 Remove((struct Node *)Selected);
  449.  
  450.                                 AddTail(FastMacroList,(struct Node *)Selected);
  451.  
  452.                                 RefreshFastWindow(TRUE);
  453.  
  454.                                 Offset = FastMacroCount - 1;
  455.  
  456.                                 LT_SetAttributes(Handle,GAD_LIST,
  457.                                     GTLV_Labels,    FastMacroList,
  458.                                     GTLV_Selected,    Offset,
  459.                                     GTLV_Top,    Offset,
  460.                                 TAG_DONE);
  461.  
  462.                                 LT_SetAttributes(Handle,GAD_TOP,
  463.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  464.                                 TAG_DONE);
  465.  
  466.                                 LT_SetAttributes(Handle,GAD_UP,
  467.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  468.                                 TAG_DONE);
  469.  
  470.                                 LT_SetAttributes(Handle,GAD_DOWN,
  471.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  472.                                 TAG_DONE);
  473.  
  474.                                 LT_SetAttributes(Handle,GAD_END,
  475.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  476.                                 TAG_DONE);
  477.  
  478.                                 MadeChanges = TRUE;
  479.  
  480.                                 break;
  481.  
  482.                             case GAD_NEW:
  483.  
  484.                                 if(Node = NewFastMacro(LocaleString(MSG_FASTMACROPANEL_UNNAMED_TXT),""))
  485.                                 {
  486.                                     LT_SetAttributes(Handle,GAD_LIST,
  487.                                         GTLV_Labels,    ~0,
  488.                                     TAG_DONE);
  489.  
  490.                                     AddTail(FastMacroList,(struct Node *)Node);
  491.  
  492.                                     RefreshFastWindow(TRUE);
  493.  
  494.                                     LT_SetAttributes(Handle,GAD_LIST,
  495.                                         GTLV_Labels,    FastMacroList,
  496.                                         GTLV_Selected,    FastMacroCount++,
  497.                                     TAG_DONE);
  498.  
  499.                                     LT_SetAttributes(Handle,GAD_CODE,
  500.                                         GTST_String,    "",
  501.                                         GA_Disabled,    FALSE,
  502.                                     TAG_DONE);
  503.  
  504.                                     LT_SetAttributes(Handle,GAD_MACRO,
  505.                                         GTST_String,    Node -> mn_Macro,
  506.                                         GA_Disabled,    FALSE,
  507.                                     TAG_DONE);
  508.  
  509.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  510.                                         GA_Disabled,    FALSE,
  511.                                     TAG_DONE);
  512.  
  513.                                     LT_SetAttributes(Handle,GAD_SAVE,
  514.                                         GA_Disabled,    FALSE,
  515.                                     TAG_DONE);
  516.  
  517.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  518.                                         GA_Disabled,    FALSE,
  519.                                     TAG_DONE);
  520.  
  521.                                     Selected = Node;
  522.  
  523.                                     Offset = MsgCode;
  524.  
  525.                                     LT_SetAttributes(Handle,GAD_TOP,
  526.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  527.                                     TAG_DONE);
  528.  
  529.                                     LT_SetAttributes(Handle,GAD_UP,
  530.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  531.                                     TAG_DONE);
  532.  
  533.                                     LT_SetAttributes(Handle,GAD_DOWN,
  534.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  535.                                     TAG_DONE);
  536.  
  537.                                     LT_SetAttributes(Handle,GAD_END,
  538.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  539.                                     TAG_DONE);
  540.  
  541.                                     LT_Activate(Handle,GAD_MACRO);
  542.  
  543.                                     MadeChanges = TRUE;
  544.                                 }
  545.                                 else
  546.                                     DisplayBeep(FastWindow -> WScreen);
  547.  
  548.                                 break;
  549.  
  550.                             case GAD_CLEAR:
  551.  
  552.                                 LT_SetAttributes(Handle,GAD_LIST,
  553.                                     GTLV_Labels,    ~0,
  554.                                 TAG_DONE);
  555.  
  556.                                 FreeList(FastMacroList);
  557.  
  558.                                 RefreshFastWindow(TRUE);
  559.  
  560.                                 FastMacroCount = 0;
  561.  
  562.                                 LT_SetAttributes(Handle,GAD_LIST,
  563.                                     GTLV_Labels,    FastMacroList,
  564.                                     GTLV_Selected,    ~0,
  565.                                 TAG_DONE);
  566.  
  567.                                 Selected = NULL;
  568.  
  569.                                 LT_SetAttributes(Handle,GAD_TOP,
  570.                                     GA_Disabled,    TRUE,
  571.                                 TAG_DONE);
  572.  
  573.                                 LT_SetAttributes(Handle,GAD_UP,
  574.                                     GA_Disabled,    TRUE,
  575.                                 TAG_DONE);
  576.  
  577.                                 LT_SetAttributes(Handle,GAD_DOWN,
  578.                                     GA_Disabled,    TRUE,
  579.                                 TAG_DONE);
  580.  
  581.                                 LT_SetAttributes(Handle,GAD_END,
  582.                                     GA_Disabled,    TRUE,
  583.                                 TAG_DONE);
  584.  
  585.                                 LT_SetAttributes(Handle,GAD_REMOVE,
  586.                                     GA_Disabled,    TRUE,
  587.                                 TAG_DONE);
  588.  
  589.                                 LT_SetAttributes(Handle,GAD_MACRO,
  590.                                     GTST_String,    "",
  591.                                     GA_Disabled,    TRUE,
  592.                                 TAG_DONE);
  593.  
  594.                                 LT_SetAttributes(Handle,GAD_CODE,
  595.                                     GTST_String,    "",
  596.                                     GA_Disabled,    TRUE,
  597.                                 TAG_DONE);
  598.  
  599.                                 LT_SetAttributes(Handle,GAD_SAVE,
  600.                                     GA_Disabled,    TRUE,
  601.                                 TAG_DONE);
  602.  
  603.                                 LT_SetAttributes(Handle,GAD_CLEAR,
  604.                                     GA_Disabled,    TRUE,
  605.                                 TAG_DONE);
  606.  
  607.                                 MadeChanges = FastMacrosChanged = FALSE;
  608.  
  609.                                 break;
  610.  
  611.                             case GAD_REMOVE:
  612.  
  613.                                 if(Selected)
  614.                                 {
  615.                                     LT_SetAttributes(Handle,GAD_LIST,
  616.                                         GTLV_Labels,    ~0,
  617.                                     TAG_DONE);
  618.  
  619.                                     if(--FastMacroCount)
  620.                                     {
  621.                                         if(Selected -> mn_Succ -> mn_Succ)
  622.                                             Node = Selected -> mn_Succ;
  623.                                         else
  624.                                         {
  625.                                             Node = Selected -> mn_Pred;
  626.  
  627.                                             Offset = 0;
  628.                                         }
  629.                                     }
  630.  
  631.                                     FreeNode((struct Node *)Selected);
  632.  
  633.                                     RefreshFastWindow(TRUE);
  634.  
  635.                                     LT_SetAttributes(Handle,GAD_LIST,
  636.                                         GTLV_Labels,    FastMacroList,
  637.                                         GTLV_Selected,    Node -> mn_Succ ? GetNodeOffset((struct Node *)Node,FastMacroList) : ~0,
  638.                                     TAG_DONE);
  639.  
  640.                                     if(!FastMacroCount)
  641.                                     {
  642.                                         Selected = NULL;
  643.  
  644.                                         LT_SetAttributes(Handle,GAD_TOP,
  645.                                             GA_Disabled,    TRUE,
  646.                                         TAG_DONE);
  647.  
  648.                                         LT_SetAttributes(Handle,GAD_UP,
  649.                                             GA_Disabled,    TRUE,
  650.                                         TAG_DONE);
  651.  
  652.                                         LT_SetAttributes(Handle,GAD_DOWN,
  653.                                             GA_Disabled,    TRUE,
  654.                                         TAG_DONE);
  655.  
  656.                                         LT_SetAttributes(Handle,GAD_END,
  657.                                             GA_Disabled,    TRUE,
  658.                                         TAG_DONE);
  659.  
  660.                                         LT_SetAttributes(Handle,GAD_REMOVE,
  661.                                             GA_Disabled,    TRUE,
  662.                                         TAG_DONE);
  663.  
  664.                                         LT_SetAttributes(Handle,GAD_MACRO,
  665.                                             GTST_String,    "",
  666.                                             GA_Disabled,    TRUE,
  667.                                         TAG_DONE);
  668.  
  669.                                         LT_SetAttributes(Handle,GAD_CODE,
  670.                                             GTST_String,    "",
  671.                                             GA_Disabled,    TRUE,
  672.                                         TAG_DONE);
  673.  
  674.                                         LT_SetAttributes(Handle,GAD_SAVE,
  675.                                             GA_Disabled,    TRUE,
  676.                                         TAG_DONE);
  677.  
  678.                                         LT_SetAttributes(Handle,GAD_CLEAR,
  679.                                             GA_Disabled,    TRUE,
  680.                                         TAG_DONE);
  681.                                     }
  682.                                     else
  683.                                     {
  684.                                         Selected = Node;
  685.  
  686.                                         LT_SetAttributes(Handle,GAD_CODE,
  687.                                             GTST_String,    Selected -> mn_Code,
  688.                                         TAG_DONE);
  689.  
  690.                                         LT_SetAttributes(Handle,GAD_MACRO,
  691.                                             GTST_String,    Selected -> mn_Macro,
  692.                                         TAG_DONE);
  693.  
  694.                                         LT_SetAttributes(Handle,GAD_TOP,
  695.                                             GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  696.                                         TAG_DONE);
  697.  
  698.                                         LT_SetAttributes(Handle,GAD_UP,
  699.                                             GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  700.                                         TAG_DONE);
  701.  
  702.                                         LT_SetAttributes(Handle,GAD_DOWN,
  703.                                             GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  704.                                         TAG_DONE);
  705.  
  706.                                         LT_SetAttributes(Handle,GAD_END,
  707.                                             GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  708.                                         TAG_DONE);
  709.                                     }
  710.  
  711.                                     MadeChanges = TRUE;
  712.                                 }
  713.  
  714.                                 break;
  715.  
  716.                             case GAD_LIST:
  717.  
  718.                                 if(Selected = (struct MacroNode *)GetListNode(MsgCode,FastMacroList))
  719.                                 {
  720.                                     Offset = MsgCode;
  721.  
  722.                                     LT_SetAttributes(Handle,GAD_MACRO,
  723.                                         GTST_String,    Selected -> mn_Macro,
  724.                                         GA_Disabled,    FALSE,
  725.                                     TAG_DONE);
  726.  
  727.                                     LT_SetAttributes(Handle,GAD_CODE,
  728.                                         GTST_String,    Selected -> mn_Code,
  729.                                         GA_Disabled,    FALSE,
  730.                                     TAG_DONE);
  731.  
  732.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  733.                                         GA_Disabled,    FALSE,
  734.                                     TAG_DONE);
  735.  
  736.                                     LT_SetAttributes(Handle,GAD_TOP,
  737.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  738.                                     TAG_DONE);
  739.  
  740.                                     LT_SetAttributes(Handle,GAD_UP,
  741.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  742.                                     TAG_DONE);
  743.  
  744.                                     LT_SetAttributes(Handle,GAD_DOWN,
  745.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  746.                                     TAG_DONE);
  747.  
  748.                                     LT_SetAttributes(Handle,GAD_END,
  749.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  750.                                     TAG_DONE);
  751.                                 }
  752.  
  753.                                 break;
  754.  
  755.                             case GAD_MACRO:
  756.  
  757.                                 if(Selected)
  758.                                 {
  759.                                     LT_SetAttributes(Handle,GAD_LIST,
  760.                                         GTLV_Labels,    ~0,
  761.                                     TAG_DONE);
  762.  
  763.                                     strcpy(Selected -> mn_Macro,(STRPTR)LT_GetAttributes(Handle,GAD_MACRO,TAG_DONE));
  764.  
  765.                                     RefreshFastWindow(TRUE);
  766.  
  767.                                     LT_SetAttributes(Handle,GAD_LIST,
  768.                                         GTLV_Labels,    FastMacroList,
  769.                                         GTLV_Selected,    GetNodeOffset((struct Node *)Selected,FastMacroList),
  770.                                     TAG_DONE);
  771.  
  772.                                     LT_SetAttributes(Handle,GAD_CODE,
  773.                                         GTST_String,    Selected -> mn_Code,
  774.                                     TAG_DONE);
  775.  
  776.                                     MadeChanges = TRUE;
  777.  
  778.                                     LT_Activate(Handle,GAD_CODE);
  779.                                 }
  780.  
  781.                                 break;
  782.  
  783.                             case GAD_CODE:
  784.  
  785.                                 if(Selected)
  786.                                 {
  787.                                     strcpy(Selected -> mn_Code,(STRPTR)LT_GetAttributes(Handle,GAD_CODE,TAG_DONE));
  788.  
  789.                                     MadeChanges = TRUE;
  790.                                 }
  791.  
  792.                                 break;
  793.  
  794.                             case GAD_LOAD:
  795.  
  796.                                 SplitFileName(LastFastMacros,&DummyChar,DummyBuffer);
  797.  
  798.                                 LT_LockWindow(FastWindow);
  799.  
  800.                                 if(FileRequest = GetFile(FastWindow,LocaleString(MSG_FASTMACROPANEL_LOAD_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  801.                                 {
  802.                                     LT_SetAttributes(Handle,GAD_LIST,
  803.                                         GTLV_Labels,    ~0,
  804.                                     TAG_DONE);
  805.  
  806.                                     Selected = NULL;
  807.  
  808.                                     if(!LoadFastMacros(DummyBuffer,FastMacroList))
  809.                                         ShowError(FastWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  810.                                     else
  811.                                     {
  812.                                         strcpy(Config -> FastMacroFileName,DummyBuffer);
  813.  
  814.                                         strcpy(LastFastMacros,DummyBuffer);
  815.  
  816.                                         MadeChanges = FastMacrosChanged = FALSE;
  817.                                     }
  818.  
  819.                                     LT_SetAttributes(Handle,GAD_LIST,
  820.                                         GTLV_Labels,    FastMacroList,
  821.                                     TAG_DONE);
  822.  
  823.                                     LT_SetAttributes(Handle,GAD_CODE,
  824.                                         GTST_String,    "",
  825.                                         GA_Disabled,    TRUE,
  826.                                     TAG_DONE);
  827.  
  828.                                     LT_SetAttributes(Handle,GAD_MACRO,
  829.                                         GTST_String,    "",
  830.                                         GA_Disabled,    TRUE,
  831.                                     TAG_DONE);
  832.  
  833.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  834.                                         GA_Disabled,    TRUE,
  835.                                     TAG_DONE);
  836.  
  837.                                     LT_SetAttributes(Handle,GAD_TOP,
  838.                                         GA_Disabled,    TRUE,
  839.                                     TAG_DONE);
  840.  
  841.                                     LT_SetAttributes(Handle,GAD_UP,
  842.                                         GA_Disabled,    TRUE,
  843.                                     TAG_DONE);
  844.  
  845.                                     LT_SetAttributes(Handle,GAD_DOWN,
  846.                                         GA_Disabled,    TRUE,
  847.                                     TAG_DONE);
  848.  
  849.                                     LT_SetAttributes(Handle,GAD_END,
  850.                                         GA_Disabled,    TRUE,
  851.                                     TAG_DONE);
  852.  
  853.                                     LT_SetAttributes(Handle,GAD_SAVE,
  854.                                         GA_Disabled,    !FastMacroCount,
  855.                                     TAG_DONE);
  856.  
  857.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  858.                                         GA_Disabled,    !FastMacroCount,
  859.                                     TAG_DONE);
  860.  
  861.                                     RefreshFastWindow(TRUE);
  862.  
  863.                                     FreeAslRequest(FileRequest);
  864.                                 }
  865.  
  866.                                 LT_UnlockWindow(FastWindow);
  867.  
  868.                                 break;
  869.  
  870.                             case GAD_SAVE:
  871.  
  872.                                 SplitFileName(LastFastMacros,&DummyChar,DummyBuffer);
  873.  
  874.                                 LT_LockWindow(FastWindow);
  875.  
  876.                                 if(FileRequest = GetFile(FastWindow,LocaleString(MSG_FASTMACROPANEL_SAVE_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  877.                                 {
  878.                                     if(!SaveFastMacros(DummyBuffer,FastMacroList))
  879.                                         ShowError(FastWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  880.                                     else
  881.                                     {
  882.                                         strcpy(LastFastMacros,DummyBuffer);
  883.  
  884.                                         MadeChanges = FastMacrosChanged = FALSE;
  885.                                     }
  886.  
  887.                                     FreeAslRequest(FileRequest);
  888.                                 }
  889.  
  890.                                 LT_UnlockWindow(FastWindow);
  891.  
  892.                                 break;
  893.                         }
  894.                     }
  895.                 }
  896.             }
  897.             while(!Done);
  898.  
  899.             PopWindow();
  900.         }
  901.  
  902.         LT_DeleteHandle(Handle);
  903.     }
  904.  
  905.     if(pFastMacrosChanged)
  906.         *pFastMacrosChanged = FastMacrosChanged;
  907.  
  908.     return(MadeChanges);
  909. }
  910.